#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include <string.h>

#ifdef  PRINCIPAL
  #define        DECL         			  //Retira DECL (permitindo a declaracao da variavel), quando no programa principal
  #define        INIT(x) = x               //Inclui inicializacao quando no programa principal
#else
  #define        DECL    extern           //Define DECL como externo (usa variavel declarada em outro modulo)
  #define        INIT(x)                  //Retira inicializacao quando fora do programa principal
#endif

/* ---==================--- TIPOS ---======================---*/
/*typedef struct Tipo_Plano {
	
	int a;
	int b;
	int c;
	int d;

} Tipo_Plano;

typedef struct Tipo_Planeta {

	int x;
	int y;
	int z;

} Tipo_Planeta;*/


/********************** VARIÁVEIS GLOBAIS ******************************/

DECL int						**Plano;
DECL int						**Planeta;

DECL char						**Matriz_Plano;
	
DECL int 						Maximo_Planetas;
DECL int 						Quant_planos;
DECL int 						Quant_planetas;

/*************************** FUNÇÕES ************************************/

//FUNÇÕES PRINCIPAIS:
int main(int argc, char *argv[]);
char *Ler_Terminal (int argc, char *argv[]);

//LEITURA E ESCRITA DE ARQUIVO:
int Ler_Arquivo(char *nome_arquivo);

//ALGORITMO PRINCIPAL:
void Algoritmo_Principal ();

//LOCALIZAÇÃO DE PONTOS NAS REGIÕES:
void Localizar_Ponto_Espaco (char letra_at, int plano_caract);
char Verificar_Ponto_Plano (int resultado, char letra_at);
int Contar_Planetas ();

// ALOCAÇÃO E LIBERAÇÃO DE MATRIZES:
char **Alocar_Matriz_Caracteres (int m, int n);
int Liberar_Matriz_Caracteres (int m, int n, char **v);
int **Alocar_Matriz (int m, int n);
int Liberar_Matriz (int m, int n, int **v);
void heapsort(char **a, int n);

